require('dotenv').config({
  path: `.env.${process.env.NODE_ENV || 'development'}`
});
const express = require('express');
const mongoose = require('mongoose');
const cors = require('cors');
const logisticsRoutes = require('./routes/logistics');
const usersRoutes = require('./routes/users');

const app = express();

// 新增：请求日志中间件（记录请求地址、参数、响应状态及内容）
app.use((req, res, next) => {
  const start = Date.now();
  const { method, originalUrl, query, params, body } = req;
  let responseBody = ''; // 存储响应内容

  // 拦截 res.json 和 res.send 方法，捕获响应体
  const originalJson = res.json;
  const originalSend = res.send;
  
  res.json = function (body) {
    responseBody = JSON.stringify(body, null, 2); // 格式化 JSON 响应
    originalJson.call(this, body);
  };
  
  res.send = function (body) {
    responseBody = body.toString(); // 普通文本响应
    originalSend.call(this, body);
  };

  // 记录请求基本信息（地址、参数）
  console.log('\n===================== 请求开始 =====================');
  console.log(`[${new Date().toISOString()}] 请求方法: ${method}`);
  console.log(`请求地址: ${originalUrl}`);
  console.log('查询参数（query）:', query);
  console.log('路径参数（params）:', params);
  console.log('请求体（body）:', body);

  // 监听响应完成事件（记录返回状态、内容和耗时）
  res.on('finish', () => {
    const duration = Date.now() - start;
    console.log('\n===================== 响应完成 =====================');
    console.log(`[${new Date().toISOString()}] 响应状态码: ${res.statusCode}`);
    console.log('响应内容:', responseBody); // 新增：打印响应内容
    console.log(`请求耗时: ${duration}ms`);
    console.log('====================================================\n');
  });

  next();
});

app.use(cors());
app.use(express.json());

// 连接 MongoDB
mongoose.connect('mongodb://localhost:27017/book')
  .then(() => console.log('MongoDB连接成功'))
  .catch(err => console.error('MongoDB连接失败:', err));

app.use('/api/logistics', logisticsRoutes);
app.use('/api/users', usersRoutes);

module.exports = app;  // 关键导出语句
